# 什么是魔术方法
# 它是一种的特殊方法，普通
# 1)在Python中，所有以双下划线包起来的方法，统称为Magic Method(魔术方法)，方法需要调用，而魔术方法不需要调用就可以自动执行。
# 2)魔术方法在类或对象的某些事件发生时会自动执行，让类具有神奇的"魔力"。如果希望根据自己的程序定制特殊功能的类，那么就需要对这些方法进行重写。
# 3)Python中常用的运算符、for循环、以及类操作等都是运行在魔术方法之上的


class Monster:
    """
    Monster类用于创建怪物对象，怪物对象具有名称、年龄和性别属性。

    属性:
        name (str): 怪物的名字。
        age (int): 怪物的年龄。
        gender (str): 怪物的性别。
    """

    def __init__(self, name, age, gender):
        """
        初始化Monster对象并设置其名称、年龄和性别。

        参数:
            name (str): 怪物的名字。
            age (int): 怪物的年龄。
            gender (str): 怪物的性别。
        """
        self.name = name
        self.age = age
        self.gender = gender

    # 如果不重写，默认调用的是object的__str__方法 返回的就是类型+对象的内存地址
    def __str__(self):
        """
        重写__str__方法以提供Monster对象的字符串表示形式。

        返回:
            str: 包含怪物名字、年龄和性别的字符串。
        """
        return f"{self.name}的年龄是{self.age}，性别是{self.gender}"


# 创建一个Monster对象实例，名字为"jack"，年龄为18，性别为"male"
m = Monster("jack", 18, "male")
# 默认情况下，打印对象时输出的是对象的类型和内存地址
# 通过重写__str__方法，我们可以自定义对象的字符串表示形式，类似于Java的toString方法
print(m)
